package q231_isPowerOfTwo;

public class Solution {

    /*
    用循环判断一个数是否是2的幂一般不再讨论范围内
    这里使用位运算的方法
    我们考虑当一个数是2的幂的时候 它的二进制表示是类似于如下
    1 10 100 1000 ...
    那么它减1就是
    0 01 011 0111
    所以存在n & (n - 1) = 0
    因此只需要简单判断

     */

    static final int BIG = 1 << 30;
    public boolean isPowerOfTwo(int n) {
        return n > 0 && (n  & (n - 1)) == 0;
        // 还有一个取巧方法
        // 在题目给定的 32 位有符号整数的范围内，最大的 2 的幂为 2^{30} = 10737418242
        // 我们只需要判断 n 是否是 2^{30}的约数即可。
        // return n > 0 && BIG % n == 0;
    }
}
